//package com.isoft.airportsystem.service.system.impl;
//
//import com.isoft.airportsystem.entity.flight.BaggageInfo;
//import com.isoft.airportsystem.service.flight.BaggageService;
//import com.isoft.airportsystem.service.flight.FlightService;
//import com.isoft.airportsystem.service.monitor.SystemMonitorService;
//import com.isoft.airportsystem.service.system.StatisticsService;
//import com.isoft.airportsystem.service.system.UserService;
//import com.isoft.airportsystem.util.Constants;
//import com.isoft.airportsystem.util.StatsDataConverter;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.cache.annotation.Cacheable;
//import org.springframework.stereotype.Service;
//
//import java.time.LocalDate;
//import java.time.format.DateTimeFormatter;
//import java.util.*;
//
///**
// * 统计服务实现类 - 集成真实数据源
// */
//@Service
//public class StatisticsServiceImpl implements StatisticsService {
//
//    @Autowired
//    private UserService userService;
//
//    @Autowired
//    private FlightService flightService;
//
//    @Autowired
//    private BaggageService baggageService;
//
//
//
//    // 仪表盘统计 - 带权限控制和缓存
//    @Override
//    @Cacheable(value = "dashboardCache", key = "#userId")
//    public Map<String, Object> getDashboardStatistics(Long userId) {
//        List<String> permissions = userService.selectPermissionsByUserId(userId);
//        Map<String, Object> data = new HashMap<>();
//
//        // 基础航班数据（所有用户可见）
//        data.put("totalFlights", flightService.getTotalFlightCount());
//        data.put("todayFlights", flightService.getTodayFlightCount());
//
//        // 管理员可见数据
//        if (permissions.contains(Constants.Permission.ADMIN)) {
//            data.put("totalUsers", userService.getTotalUserCount());
//            data.put("activeUsers", userService.getActiveUserCount());
//        }
//
//        // 航班管理员可见数据
//        if (permissions.contains(Constants.Permission.FLIGHT_MANAGE)) {
//            Map<String, Object> flightStats = flightService.getDelayStats();
//            data.put("delayedFlights", flightStats.get("delayedCount"));
//            data.put("canceledFlights", flightStats.get("canceledCount"));
//
//            Map<String, Object> baggageStats = new HashMap<>();
//            baggageStats.put("totalBaggage", baggageService.getTotalBaggageCount());
//            baggageStats.put("mishandledBaggage", baggageService.getMishandledBaggageCount());
//            data.put("baggageStats", baggageStats);
//        }
//
//        return data;
//    }
//
//    // 航班统计 - 带缓存
//    @Override
//    @Cacheable(value = "flightStatsCache", key = "'flightStats'")
//    public Map<String, Object> getFlightStatistics() {
//        Map<String, Object> data = new HashMap<>();
//
//        // 航班状态统计（饼图）
//        Map<String, Integer> statusDistribution = flightService.getFlightStatusDistribution();
//        data.put("flightStatusStats", StatsDataConverter.convertToPieData(
//                statusDistribution,
//                status -> Constants.FlightStatus.getDisplayName(status)
//        ));
//
//        // 近7天航班统计（折线图）
//        Map<String, Object> weeklyFlightStats = new HashMap<>();
//        List<String> dates = getLast7Days();
//        List<Integer> counts = flightService.getWeeklyFlightCounts(dates);
//        weeklyFlightStats.put("dates", dates);
//        weeklyFlightStats.put("counts", counts);
//        data.put("weeklyFlightStats", weeklyFlightStats);
//
//        // 航班类型统计（柱状图）
//        Map<String, Integer> typeDistribution = flightService.getFlightTypeDistribution();
//        Map<String, Object> flightTypeStats = new HashMap<>();
//        flightTypeStats.put("types", typeDistribution.keySet());
//        flightTypeStats.put("counts", typeDistribution.values());
//        data.put("flightTypeStats", flightTypeStats);
//
//        return data;
//    }
//
//    // 行李统计 - 带缓存
//    @Override
//    @Cacheable(value = "baggageStatsCache", key = "'baggageStats'")
//    public Map<String, Object> getBaggageStatistics() {
//        Map<String, Object> data = new HashMap<>();
//
//        // 行李状态统计（饼图）
//        Map<String, Integer> statusStats = baggageService.getBaggageStatusStats();
//        data.put("baggageStatusStats", StatsDataConverter.convertToPieData(
//                statusStats,
//                status -> Constants.BaggageStatus.getDisplayName(status)
//        ));
//
//        // 近7天行李统计（折线图）
//        Map<String, Object> weeklyBaggageStats = new HashMap<>();
//        List<String> dates = getLast7Days();
//        List<Integer> counts = baggageService.getWeeklyBaggageCounts(dates);
//        weeklyBaggageStats.put("dates", dates);
//        weeklyBaggageStats.put("counts", counts);
//        data.put("weeklyBaggageStats", weeklyBaggageStats);
//
//        return data;
//    }
//
//    // 用户统计 - 带缓存
//    @Override
//    @Cacheable(value = "userStatsCache", key = "'userStats'")
//    public Map<String, Object> getUserStatistics() {
//        Map<String, Object> data = new HashMap<>();
//
//        // 用户状态统计（饼图）
//        Map<String, Integer> userStatusStats = userService.getUserStatusStats();
//        data.put("userStatusStats", StatsDataConverter.convertToPieData(
//                userStatusStats,
//                status -> Constants.UserStatus.getDisplayName(status)
//        ));
//
//        // 用户角色分布（饼图）
//        Map<String, Integer> roleDistribution = userService.getUserRoleDistribution();
//        data.put("userRoleStats", StatsDataConverter.convertToPieData(
//                roleDistribution,
//                role -> Constants.UserRole.getDisplayName(role)
//        ));
//
//        // 近7天登录统计（折线图）
//        Map<String, Object> weeklyLoginStats = new HashMap<>();
//        List<String> dates = getLast7Days();
//        List<Integer> counts = userService.getWeeklyLoginCounts(dates);
//        weeklyLoginStats.put("dates", dates);
//        weeklyLoginStats.put("counts", counts);
//        data.put("weeklyLoginStats", weeklyLoginStats);
//
//        return data;
//    }
//
//    /**
//     * 获取最近7天的日期列表（带缓存）
//     */
//    @Cacheable(value = "dateCache", key = "'last7Days'")
//    private List<String> getLast7Days() {
//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//        LocalDate today = LocalDate.now();
//
//        List<String> dates = new ArrayList<>(7);
//        for (int i = 6; i >= 0; i--) {
//            dates.add(today.minusDays(i).format(formatter));
//        }
//        return dates;
//    }
//}
